﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

using Padelcenter.Common;
using Padelcenter.DataAccess;

namespace Padelcenter.BusinessLogic.Get
{
    public class GetProducto : IBusinessLogic
    {
        public GetProducto() { }

        public void Invoke()
        {
            Producto_Select oProductoSelect = new Producto_Select();
            oProductoSelect.Producto = this.Producto;

            this.Resultset = oProductoSelect.Get();
        }

        //Si es Padre trae todo lo inferior
        public List<Producto> ProductoList()
        {
            this.Invoke();

            List<Producto> listaProducto = new List<Producto>();

            DataTable dTable = new DataTable();
            dTable = this.Resultset.Tables[0];

            if (dTable.Rows.Count > 0)
            {
                Producto oProducto;

                foreach (DataRow r in dTable.Rows)
                {
                    oProducto = new Producto();
                    oProducto.IdProducto = Convert.ToInt32(r["idProducto"]);
                    oProducto.IdProductoPadre = Convert.ToInt32(r["idProductoPadre"]);

                    TipoProducto oTipoProducto = new TipoProducto();
                    oTipoProducto.IdTipoProducto = Convert.ToInt32(r["idTipoProducto"]);

                    GetTipoProducto oGetTipoProducto = new GetTipoProducto();
                    oGetTipoProducto.TipoProducto = oTipoProducto;

                    oProducto.TipoProducto = oGetTipoProducto.TipoProductoList()[0];
                    
                    Marca oMarca = new Marca();
                    oMarca.IdMarca = Convert.ToInt32(r["idMarca"]);

                    GetMarca oGetMarca = new GetMarca();
                    oGetMarca.Marca = oMarca;

                    oProducto.Marca = oGetMarca.MarcaList()[0];

                    oProducto.Descripcion = r["Descripcion"].ToString();
                    oProducto.FechaAlta = Convert.ToDateTime(r["FechaAlta"]);
                    
                    listaProducto.Add(oProducto);
                }
            }

            return listaProducto;
        }

        private DataSet _resultset;
        private Producto _producto;

        public Producto Producto
        {
            get { return _producto; }
            set { _producto = value; }
        }

        public DataSet Resultset
        {
            get { return _resultset; }
            set { _resultset = value; }
        }
    }

    public class GetProductoDescripcion : IBusinessLogic
    {
        public GetProductoDescripcion() { }

        public void Invoke()
        {
            ProductoDescripcion_Select oProductoDescripcionSelect = new ProductoDescripcion_Select();
            oProductoDescripcionSelect.ProductoDescripcion = this.ProductoDescripcion;

            this.Resultset = oProductoDescripcionSelect.Get();
        }

        public List<ProductoDescripcion> ProductoDescripcionList()
        {
            this.Invoke();

            List<ProductoDescripcion> listaProductoDescripcion = new List<ProductoDescripcion>();

            DataTable dTable = new DataTable();
            dTable = this.Resultset.Tables[0];

            if (dTable.Rows.Count > 0)
            {
                ProductoDescripcion oProductoDescripcion;

                foreach (DataRow r in dTable.Rows)
                {
                    oProductoDescripcion = new ProductoDescripcion();

                    Producto oProducto = new Producto();
                    oProducto.IdProducto = Convert.ToInt32(r["idProducto"]);

                    GetProducto oGetProducto = new GetProducto();
                    oGetProducto.Producto = oProducto;

                    oProductoDescripcion.Producto = oGetProducto.ProductoList()[0];

                    Idioma oIdioma = new Idioma();
                    oIdioma.IdIdioma = Convert.ToInt32(r["idIdioma"]);

                    GetIdioma oGetIdioma = new GetIdioma();
                    oGetIdioma.Idioma = oIdioma;

                    oProductoDescripcion.Idioma = oGetIdioma.IdiomaList()[0];


                    oProductoDescripcion.Descripcion = r["Descripcion"].ToString();
                    oProductoDescripcion.Nombre = r["Nombre"].ToString();

                    listaProductoDescripcion.Add(oProductoDescripcion);
                }
            }

            return listaProductoDescripcion;
        }

        private DataSet _resultset;
        private ProductoDescripcion _productoDescripcion;

        public ProductoDescripcion ProductoDescripcion
        {
            get { return _productoDescripcion; }
            set { _productoDescripcion = value; }
        }

        public DataSet Resultset
        {
            get { return _resultset; }
            set { _resultset = value; }
        }
    }

    public class GetProductoPropiedad : IBusinessLogic
    {
        public GetProductoPropiedad() { }

        public void Invoke()
        {
            ProductoPropiedad_Select oProductoPropiedadSelect = new ProductoPropiedad_Select();
            oProductoPropiedadSelect.ProductoPropiedad = this.ProductoPropiedad;

            this.Resultset = oProductoPropiedadSelect.Get();
        }

        public List<ProductoPropiedad> ProductoPropiedadList()
        {
            this.Invoke();

            List<ProductoPropiedad> listaProductoPropiedad = new List<ProductoPropiedad>();

            DataTable dTable = new DataTable();
            dTable = this.Resultset.Tables[0];

            if (dTable.Rows.Count > 0)
            {
                ProductoPropiedad oProductoPropiedad;

                foreach (DataRow r in dTable.Rows)
                {
                    oProductoPropiedad = new ProductoPropiedad();

                    Producto oProducto = new Producto();
                    oProducto.IdProducto = Convert.ToInt32(r["idProducto"]);

                    GetProducto oGetProducto = new GetProducto();
                    oGetProducto.Producto = oProducto;

                    oProductoPropiedad.Producto = oGetProducto.ProductoList()[0];

                    Propiedad oPropiedad = new Propiedad();
                    oPropiedad.IdPropiedad = Convert.ToInt32(r["idPropiedad"]);

                    GetPropiedad oGetPropiedad = new GetPropiedad();
                    oGetPropiedad.Propiedad = oPropiedad;

                    oProductoPropiedad.Propiedad = oGetPropiedad.PropiedadList()[0];

                    listaProductoPropiedad.Add(oProductoPropiedad);
                }
            }

            return listaProductoPropiedad;
        }

        private DataSet _resultset;
        private ProductoPropiedad _productoPropiedad;

        public ProductoPropiedad ProductoPropiedad
        {
            get { return _productoPropiedad; }
            set { _productoPropiedad = value; }
        }

        public DataSet Resultset
        {
            get { return _resultset; }
            set { _resultset = value; }
        }
    }

    public class GetProductoPrecio : IBusinessLogic
    {
        public GetProductoPrecio(){}

        public void Invoke()
        {
            ProductoPrecio_Select oProductoPrecioSelect = new ProductoPrecio_Select();
            oProductoPrecioSelect.ProductoPrecio = this.ProductoPrecio;

            this.Resultset = oProductoPrecioSelect.Get();
        }

        public List<ProductoPrecio> ProductoPrecioList()
        {
            this.Invoke();

            List<ProductoPrecio> listaProductoPrecio = new List<ProductoPrecio>();

            DataTable dTable = new DataTable();
            dTable = this.Resultset.Tables[0];

            if (dTable.Rows.Count > 0)
            {
                ProductoPrecio oProductoPrecio;

                foreach (DataRow r in dTable.Rows)
                {
                    oProductoPrecio = new ProductoPrecio();

                    Producto oProducto = new Producto();
                    oProducto.IdProducto = Convert.ToInt32(r["idProducto"]);

                    GetProducto oGetProducto = new GetProducto();
                    oGetProducto.Producto = oProducto;

                    oProductoPrecio.Producto = oGetProducto.ProductoList()[0];

                    Zona oZona = new Zona();
                    oZona.IdZona = Convert.ToInt32(r["idZona"]);

                    GetZona oGetZona = new GetZona();
                    oGetZona.Zona = oZona;

                    oProductoPrecio.Zona = oGetZona.ZonaList()[0];

                    oProductoPrecio.Precio = Convert.ToDouble(r["Precio"]);

                    listaProductoPrecio.Add(oProductoPrecio);
                }
            }

            return listaProductoPrecio;
        }

        private ProductoPrecio _productoPrecio;
        private DataSet _resultset;

        public DataSet Resultset
        {
            get { return _resultset; }
            set { _resultset = value; }
        }

        public ProductoPrecio ProductoPrecio
        {
          get { return _productoPrecio; }
          set { _productoPrecio = value; }
        }

    }

    public class GetProductoMedia : IBusinessLogic
    {
        public GetProductoMedia() { }

        public void Invoke()
        {
            ProductoMedia_Select oProductoMediaSelect = new ProductoMedia_Select();
            oProductoMediaSelect.ProductoMedia = this.ProductoMedia;

            this.Resultset = oProductoMediaSelect.Get();
        }

        public List<ProductoMedia> ProductoMediaList()
        {
            this.Invoke();

            List<ProductoMedia> listaProductoMedia = new List<ProductoMedia>();

            DataTable dTable = new DataTable();
            dTable = this.Resultset.Tables[0];

            if (dTable.Rows.Count > 0)
            {
                ProductoMedia oProductoMedia;

                foreach (DataRow r in dTable.Rows)
                {
                    oProductoMedia = new ProductoMedia();

                    Producto oProducto = new Producto();
                    oProducto.IdProducto = Convert.ToInt32(r["idProducto"]);

                    GetProducto oGetProducto = new GetProducto();
                    oGetProducto.Producto = oProducto;

                    oProductoMedia.Producto = oGetProducto.ProductoList()[0];

                    Media oMedia = new Media();
                    oMedia.IdMedia = Convert.ToInt32(r["idMedia"]);

                    GetMedia oGetMedia = new GetMedia();
                    oGetMedia.Media = oMedia;

                    oProductoMedia.Media = oGetMedia.MediaList()[0];

                    oProductoMedia.EsPrincipal = Convert.ToBoolean(r["EsPrincipal"]);

                    listaProductoMedia.Add(oProductoMedia);
                }
            }

            return listaProductoMedia;
        }

        private ProductoMedia _productoMedia;
        private DataSet _resultset;

        public DataSet Resultset
        {
            get { return _resultset; }
            set { _resultset = value; }
        }

        public ProductoMedia ProductoMedia
        {
            get { return _productoMedia; }
            set { _productoMedia = value; }
        }
    }
}
